본문으로 건너뛰기

Copy On Write

OS에서의 COW는 fork() 기능과 관련이 깊다. fork()를 수행하면 자식 프로세스가 부모 프로세스의 복사본이 된다. 그런데 이때 대부분 fork() 이후 exec()를 수행해 새로운 프로세스를 overwrite하게 된다. 즉, 복사를 하고 바로 exec()를 통해 새로운 프로세스를 만들게 된다. 이것은 overhead가 발생하게 되므로 비효율적이다.

자식 프로세스를 생성하면 부모 프로세스가 가지고 있던 page table을 그대로 물려받는다.


따라서 COW를 이용해 자식 프로세스가 같은 프레임을 공유하게 하면 된다. 만약 자식 프로세스에 수정이 일어난다면 그 때 Copy를 수행한다. 위와 같은 상황에서 만약 Page C가 변경된다면 아래와 같이 된다.


page C의 복사본을 할당하고 이를 가리키게 하면 된다. 이런식으로 내용이 바뀌지 않을 때까지는 프레임을 공유하고, 내용이 변경된다면 새로운 프레임을 할당해서 복사를 해주어 복사에 드는 비용(overhead)를 줄일 수 있다.

대부분의 OS에서 COW 방식을 채택한다.

Reference